package com.kl.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;
/*
* 时间自动填充

创建时间,修改时间,这些操作普遍都是自动化完成,我们不希望手动创建和更新!

阿里巴巴开发手册:
* 所有的数据库表: gmt_create(创建时间),
* gmt_modified(修改时间)几乎所有的表都要配置上,
* 而且需要自动化!*/

//填充处理器 实现mp提供的元对象处理器接口
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        /**
         * 第一个参数是表字段
         * 第二个参数需要修改的字段值
         * 第三个参数 给那个数据处理
         */
        //自动填充优化 有的表没有这个字段也会调用这个方法,比较浪费性能那么,就加一个判断
        boolean createTime = metaObject.hasSetter("createTime");
        if (createTime){
            Object createTime1 = getFieldValByName("createTime", metaObject);
            if (createTime1 == null){
                this.setFieldValByName("createTime", new Date(), metaObject);
            }
        }

        //判断有无有这个字段 如果已经设置了修改的时间,那么就不需要它来自动填充
        boolean updateTime1 = metaObject.hasSetter("updateTime");
        if (updateTime1){
            Object updateTime = getFieldValByName("updateTime", metaObject);
            if (updateTime == null){
                this.setFieldValByName("updateTime", new Date(), metaObject);
            }
        }
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}